home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 2: CDPD 1
/
Almathera Ten on Ten - Disc 2: CDPD 1.iso
/
pd
/
201-225
/
214
/
mandelvroom
/
src
/
getint.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-13
|
6KB
|
257 lines
/*
* MandelVroom 2.0
*
* (c) Copyright 1987,1989 Kevin L. Clague, San Jose, CA
*
* All rights reserved.
*
* Permission is hereby granted to distribute this program's source
* executable, and documentation for non-comercial purposes, so long as the
* copyright notices are not removed from the sources, executable or
* documentation. This program may not be distributed for a profit without
* the express written consent of the author Kevin L. Clague.
*
* This program is not in the public domain.
*
* Fred Fish is expressly granted permission to distribute this program's
* source and executable as part of the "Fred Fish freely redistributable
* Amiga software library."
*
* Permission is expressly granted for this program and it's source to be
* distributed as part of the Amicus Amiga software disks, and the
* First Amiga User Group's Hot Mix disks.
*
* contents: this file implements a requester like window to get an integer
* value from the user.
*/
#include "mandp.h"
struct Window *GetIWind;
#define GIWIDTH 190
#define GIHEIGHT 50
static
struct NewWindow NewGetI = {
(320-GIWIDTH)/2,(200-GIHEIGHT)/2, /* start position */
GIWIDTH,GIHEIGHT, /* width, height */
(UBYTE) 0, (UBYTE) 1, /* detail pen, block pen */
NULL, /* IDCMP flags */
SMART_REFRESH, /* MandWind flags */
(struct Gadget *) NULL, /* first gadget */
(struct Image *) NULL, /* user checkmark */
(UBYTE *) NULL, /* window title */
(struct Screen *) NULL, /* pointer to screen */
(struct BitMap *) NULL, /* pointer to superbitmap */
80,80,80,80, /* sizing */
CUSTOMSCREEN /* type of screen */
};
#define GETINOTDONE 0
#define GETIDONEOK 1
#define GETICANCEL 2
UBYTE IDone;
char *IString;
/*
* Allocate all the gadgets and things for the get int window
*/
struct Gadget *MakeGetInt( Title, IVal )
char *Title;
LONG IVal;
{
register struct Gadget *NextGadget;
register SHORT *Height;
register struct StringInfo *StringInfo;
register struct Gadget *FirstGadget, *OldGadget;
char string[80];
extern struct Gadget *MakeBool();
extern struct Gadget *MakeString();
extern struct IntuiText *MakeIntui();
LONG i;
#define GETICANID 0xffff
#define GETIOKID 0xfffe
#define GETISTRID 0xfffd
FirstGadget = MakeBool(127, 32, 54, 12, 1, GETICANID, NULL);
if (FirstGadget == NULL) {
goto error;
}
FirstGadget->GadgetText = ShadowIntui("Cancel", 4, 3);
if ( FirstGadget->GadgetText == NULL ) goto error;
NextGadget = OldGadget = MakeBool(6, 32, 54, 12, 1, GETIOKID, NULL);
if (NextGadget == NULL) goto error;
NextGadget->GadgetText = ShadowIntui(" OK", 4, 3);
if ( NextGadget->GadgetText == NULL ) goto error;
FirstGadget->NextGadget = NextGadget;
sprintf( string,"%d",IVal );
NextGadget = MakeString( 55, 16, 10, GETISTRID, string );
if (NextGadget == NULL) goto error;
NextGadget->GadgetText = ShadowIntui(Title,-10,-11);
if ( NextGadget->GadgetText == NULL ) goto error;
/*i = IntuiTextLength(NextGadget->GadgetText);
NextGadget->GadgetText->LeftEdge = (GIWIDTH-i)/2; */
OldGadget->NextGadget = NextGadget;
StringInfo = (struct StringInfo *) NextGadget->SpecialInfo;
IString = (char *) StringInfo->Buffer;
return( FirstGadget );
error:
FreeGadgets(FirstGadget);
return((struct Gadget *) NULL);
} /* MakeGetInt */
static struct Gadget *GetGadgets;
/*
* Get an Integr from the user
*/
GetInt( Title, IVal)
char *Title;
LONG *IVal;
{
register struct Gadget *Gadgets;
register struct Window *Window;
register LONG i;
register struct RastPort *Rp;
struct Window *OpenMyWind();
IDone = GETINOTDONE;
if (GetIWind == NULL ) {
Gadgets = MakeGetInt( Title, *IVal );
if (Gadgets == NULL) {
DispErrMsg("Panic. No Gadgets\n",0);
return( 0 );
} else {
Window = OpenMyWind( &NewGetI, screen, NULL, GIWIDTH, GIHEIGHT);
GetIWind = Window;
if (Window) {
Rp = Window->RPort;
CurWind = Window;
SetAPen( Rp, NORMALPEN );
RectFill( Rp,0,0,Window->Width,Window->Height);
GetGadgets = Gadgets;
AddGList( Window, Gadgets, -1, -1);
RefreshGadgets( Gadgets, Window, NULL );
SetAPen( Rp, HIGHLIGHTPEN );
Move( Rp, 0, Window->Height-1 );
Draw( Rp, 0, 0 );
Draw( Rp, Window->Width-1, 0 );
SetAPen( Rp, SHADOWPEN );
Draw( Rp, Window->Width-1, Window->Height-1 );
Draw( Rp, 0, Window->Height-1 );
DoIGet();
if (IDone == GETIDONEOK) {
sscanf( IString,"%d", IVal);
}
CloseGetIWind();
} else {
return( 0 );
}
}
}
return( IDone == GETIDONEOK );
} /* OpenGetIWind */
/*
* Close the get integer window
*/
CloseGetIWind()
{
if (GetIWind != NULL) {
CloseMyWind( GetIWind, GetGadgets );
GetIWind = NULL;
}
} /* CloseGetIWind */
/*
* Wait and process a message
*/
DoIGet()
{
while (IDone == GETINOTDONE) {
Wait( 1 << BackWind->UserPort->mp_SigBit );
DoIMsg();
}
}
/*
* if there is a message, process it
*/
DoIMsg()
{
register ULONG Class;
register struct IntuiMessage *message;
register struct Gadget *gadget;
while (message = (struct IntuiMessage *) GetMsg( BackWind->UserPort)) {
Class = message->Class;
gadget = (struct Gadget *) message->IAddress;
/* got a message */
ReplyMsg(message);
CheckButtons( gadget, Class );
}
} /* DoIMsg */
CheckButtons( gadget, class )
struct Gadget *gadget;
ULONG class;
{
if (class == GADGETDOWN) {
switch( gadget->GadgetID ) {
case GETICANID:
IDone = GETICANCEL;
break;
case GETIOKID:
IDone = GETIDONEOK;
break;
}
}
} /* CheckButtons */